#ifndef _CONFIG_H_
#define _CONFIG_H_
#include "stdint.h"
#define YEAR ((((__DATE__ [7] - '0') * 10 + (__DATE__ [8] - '0')) * 10 +(__DATE__ [9] - '0')) * 10 \
+ (__DATE__ [10] - '0'))  
  
#define MONTH (__DATE__ [2] == 'n' ? 0 \
    : __DATE__ [2] == 'b' ? 1 \
		: __DATE__ [2] == 'r' ? (__DATE__ [0] == 'M' ? 2 : 3) \
		: __DATE__ [2] == 'y' ? 4 \
		: __DATE__ [2] == 'n' ? 5 \
		: __DATE__ [2] == 'l' ? 6 \
    : __DATE__ [2] == 'g' ? 7 \
    : __DATE__ [2] == 'p' ? 8 \
    : __DATE__ [2] == 't' ? 9 \
    : __DATE__ [2] == 'v' ? 10 : 11)  
  
#define DAY ((__DATE__ [4] == ' ' ? 0 : __DATE__ [4] - '0') * 10 \
    + (__DATE__ [5] - '0'))

#define APP_VERSION_Major      1
#define App_VERSION_Minor      0
#define APP_VERSION_Revision   2
#define APP_VERSION_Build      0

/**************串口停止位长度****************/
typedef enum{
	ZY_UART_StopBits_1   = 0,    //1位停止位
  ZY_UART_StopBits_1_5 = 1,    //1.5位停止位
  ZY_UART_StopBits_2   = 2,    //2位停止位
  ZY_UART_StopBits_0_5 = 3,	   //0.5位停止位
}ZY_UART_STOPBITS;
/**************串口奇偶校验位****************/
typedef enum{
	ZY_UART_PARITY_NONE = 0,   //校验空
	ZY_UART_RARITY_EVEN = 1,   //偶校验
	ZY_UART_RARITY_ODD  = 2,   //奇校验
}ZY_UART_RARITY;

/**************串口奇偶校验位****************/
typedef enum{
	ZY_UART_DataBits_7BIT = 0,   //校验空
	ZY_UART_DataBits_8BIT = 1,   //偶校验
	ZY_UART_DataBits_9BIT = 2,   //奇校验
}ZY_UART_DATABITS;
/*********************************
* 版本信息结构体
*********************************/
typedef struct
{
	uint8_t  major;         //主版本号
	uint8_t  minor;         //子版本号
	uint8_t  revision;      //修正版本号
	uint8_t  build;         //编译版本号
}Version_Def_t;
/*****************************
 * 日期信息结构体
*****************************/
typedef struct 
{
	uint16_t year;          //年
	uint8_t  monty;         //月
	uint8_t  day;           //日
}Date_Def_t;

/*********************************
 * 模块通用配置参数
 ********************************/
typedef struct 
{
    uint8_t                   status;             //配置状态，0：未配置  1：已配置
	  uint32_t                  SN;                 //模块序列号
}GeneralConfigInfo_Def_t;

//IAP 配置信息
typedef struct
{
	uint8_t        ipa_step;       //IAP 状态  
  uint16_t       app_addr;	     //app 地址
}IAP_Config_Def_t;

/*******************************
 * 模块信息
 * ****************************/
typedef struct
{
	IAP_Config_Def_t           iap_info;         //IAP 信息
  GeneralConfigInfo_Def_t    general_info;    //通用配置信息
	uint8_t                    run_model;       //模块运行模式
	uint8_t                    model_type;      //模块类型
}Config_Def_t;

typedef struct
{
	float p;
	float i;
	float d;
}PID_t;


extern Config_Def_t    model_info_handle;
void Init_Model(void);
#endif
